package transform

import (
	"encoding/json"
	"strconv"
)

// StringToUint64 定义一个通用类型，实现字符串与uint64的自动转换
type StringToUint64 uint64

// UnmarshalJSON 实现UnmarshalJSON方法，自动处理字符串转uint64
func (s *StringToUint64) UnmarshalJSON(data []byte) error {
	// 先尝试直接解析为数值
	var num uint64
	if err := json.Unmarshal(data, &num); err == nil {
		*s = StringToUint64(num)
		return nil
	}

	// 如果解析失败，尝试解析为字符串再转换
	var str string
	if err := json.Unmarshal(data, &str); err != nil {
		return err
	}

	if str == "" {
		return nil
	}

	num, err := strconv.ParseUint(str, 10, 64)
	if err != nil {
		return err
	}
	*s = StringToUint64(num)
	return nil
}
